2장. Raw Query 중심 접근
데이터베이스에 접근하는 가장 기본적인 방법은
SQL을 직접 작성하고 실행하는 것이다.
이 방식은 별도의 추상화 없이
애플리케이션이 데이터베이스와 직접 통신하는 형태를 가진다.
const result = await db.query(
"SELECT * FROM users WHERE id = $1",
[userId]
);
SQL을 문자열로 작성하고,
파라미터를 바인딩하여 실행하는 구조다.
Raw Query의 핵심 특징
이 방식은 몇 가지 명확한 특징을 가진다.
- SQL이 코드에 그대로 드러난다
- 데이터베이스에 직접 의존한다
- 별도의 추상화 계층이 거의 없다
즉, 데이터 접근에 대한 모든 제어를
개발자가 직접 가지는 구조다.
개발자가 직접 제어한다는 것
Raw Query의 가장 큰 특징은
“직접 제어한다”는 점이다.
어떤 데이터를 어떻게 가져올지,
어떤 조건을 사용할지,
어떤 조인을 수행할지 모두 SQL로 명확하게 표현된다.
이 구조에서는
- 실행되는 쿼리가 명확하게 보이고
- 데이터베이스의 기능을 그대로 활용할 수 있다
Raw Query의 장점
이 방식은 단순하지만 강력하다.
가장 큰 장점은 다음과 같다.
-
성능 제어가 용이하다
→ 실행되는 SQL을 그대로 다룰 수 있다 -
복잡한 쿼리 작성이 자유롭다
→ JOIN, GROUP BY, 서브쿼리 등 제약이 없다 -
디버깅이 명확하다
→ 실제 실행되는 SQL을 그대로 확인할 수 있다 -
데이터베이스 기능을 100% 활용할 수 있다
→ 특정 DB의 고유 기능도 그대로 사용 가능
이 때문에 Raw Query는 지금도 여전히 많이 사용된다.
규모가 커지면서 드러나는 한계
하지만 애플리케이션이 커지기 시작하면
이 방식의 한계가 점점 드러난다.
- 동일한 쿼리 패턴이 반복된다
- 조건이 많아질수록 쿼리 관리가 어려워진다
- 코드 레벨에서 구조화하기 어렵다
- 비즈니스 로직과 분리하기 힘들다
특히 동적인 조건이 많아질수록
SQL을 문자열로 다루는 부담이 커진다.
여전히 사용되는 이유
그럼에도 불구하고 Raw Query는
여전히 중요한 선택지로 남아 있다.
다음과 같은 경우에는 오히려 더 적합하다.
- 복잡한 통계 쿼리
- 성능 최적화가 중요한 기능
- 다른 방식으로 표현하기 어려운 복잡한 쿼리
즉, 이 방식은 사라진 기술이 아니라
👉 가장 직접적인 접근 방식으로 계속 사용되고 있다
다음 단계로의 흐름
하지만 반복되는 쿼리와
문자열 기반 SQL 관리의 한계를 줄이기 위해
데이터 접근을 조금 더 구조적으로 다루려는 시도가 등장한다.
특히
- SQL을 직접 조합하지 않고
- 코드 구조 안에서 안전하게 쿼리를 구성하려는 방향
으로 발전하게 된다.